//package com.tte.common.tika;
//
//import org.apache.tika.metadata.Metadata;
//import org.apache.tika.parser.ParseContext;
//import org.apache.tika.parser.pdf.PDFParser;
//import org.apache.tika.sax.ToXMLContentHandler;
//import org.xml.sax.Attributes;
//import org.xml.sax.SAXException;
//
//import java.io.File;
//import java.io.FileInputStream;
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * https://blog.csdn.net/wienerxu/article/details/124927331
// * Apache Tika 实现pdf文档分页提取内容
// * Apache Tika是一个多功能的文档内容提取工具，可以提取多种类型的文档内容，常用的如pdf、office等格式。网上的例子基本上都是提取整篇文档内容，
// * 实际上用Tika提取pdf等文档的内容主要场景多半是给搜索引擎提供更精细化的搜索推荐，需要按页面或段落方式进行内容提取。
// * 仔细研究了Tika的开发文档，实际上还是可以有一些办法实现pdf文档的分页内容提取的。
// *
// * 基本思路是利用ToXMLContentHandler，将pdf转换为xml文档，解析分页符
// * 从ToXMLContentHandler派生一个分页内容解析器，实现startElement、endElement和character方法。
// *
// * 利用startElement解析xml内容，检测分页符，按页面将内容分组放到map中记录下来；
// * 检测分页结束符，覆盖endElement方法，实际上xml是成对的，实际上没有用；
// * 覆盖character方法，将页面内容写入到对应的map中，这里有关换行符的处理可以根据需要调整；
// */
//public class PageContentHandler extends ToXMLContentHandler {
//    private String pageTag = "div";
//    private String pageClass = "page";
//    private int pageNumber = 0;
//
//    private Map<Integer,StringBuilder> pageMap;
//
//    public PageContentHandler(){
//        super();
//        pageMap = new HashMap<>();
//    }
//
//    private void startPage() {
//        pageNumber++;
//        pageMap.put(pageNumber,new StringBuilder());
//    }
//
//    private void endPage() {
//    }
//
//    public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
//        if(pageTag.equals(qName) && pageClass.equals(atts.getValue("class"))){
//            startPage();
//        }
//    }
//
//    public void endElement(String uri, String localName, String qName) throws SAXException {
//        if(pageTag.equals(qName)){
//            endPage();
//        }
//    }
//
//    public void characters(char[] ch, int start, int length) throws SAXException {
//        if(length > 0 && pageNumber > 0){
//            if(ch.length == 1 && ch[0] == '\n'){
//                return;
//            }
//            pageMap.get(pageNumber).append(ch);
////            pageMap.get(pageNumber).append('\n');
//        }
//    }
//
//    public static void main(String[] args) throws Exception{
//        PageContentHandler handler = new PageContentHandler();
//        Metadata metadata = new Metadata();
//        FileInputStream inputstream = new FileInputStream(new File("d:/唐诗三百首.pdf"));
//
//        ParseContext pcontext = new ParseContext();
//
//        //parsing the document using PDF parser
//        PDFParser pdfparser = new PDFParser();
//        pdfparser.parse(inputstream, handler, metadata,pcontext);
//
//        //getting the content of the document by pages.
//        for(Map.Entry<Integer,StringBuilder> entry:handler.pageMap.entrySet()){
//            System.out.println("======Page " + entry.getKey() + "=======");
//            System.out.println(entry.getValue().toString());
//        }
//
//        //getting metadata of the document
//        System.out.println("Metadata of the PDF:");
//        String[] metadataNames = metadata.names();
//
//        for(String name : metadataNames) {
//            System.out.println(name+ " : " + metadata.get(name));
//        }
//    }
//}
//
